data Expr a = Const a
            | Op ( Expr a) ( Expr a)
eval ( Const c ) f = c
eval ( Op x y) f = eval x f `f` eval y f
